<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>기본 내장객체 - request</title>
</head>
<body>
<h1>JSP 기본 내장객체 implicit object</h1>
<p>JSP 프로그래밍시 프로그래머가 특별히 선언하지 않아도 바로 사용할 수 미리 정의된 객체</p>
<p>JSP 페이지 실행시 웹 컨테이너가 자동으로 생성해 줌</p>
<p>실제 선언되는 곳은 JSP 페이지의 서블릿 소스의 _jspService 메서드 내임</p>

<h1>JSP 기본 내장 객체</h1>
<p>JSP 기본 객체는 상속되는 원래 클래스 이름을 줄여서 표현하는 것을 유의할 것!</p>
<p>request(HTTPServletRequest) : 사용자의 요청처리 및 폼 요소 처리</p>
<p>response(HTTPServletResponse) : 처리 결과를 사용자에게 응답형태로 돌려줌</p>
<p>pageContext(PageContext) : 웹 응용프로그램에 관련된 정보 처리</p>
<p>session(HTTPSession) : 사용자 별 접속상태 처리</p>
<p>application(ServletContext) : 웹 컨테이너의 웹 응용프로그램 처리와 관련된 정보를 참조하기 위해 사용</p>
<p>config(ServletConfig) : JSP 페이지의 초기화 작업을 처리</p>
<p>out(JspWriter) : JSP 실행결과를 출력하기 위해 output 처리 담당</p>
<p>exception(Throwable) : 예외 처리 담당</p>
<p>page(HttpJspPage) : 현재 실행중인 JSP 페이지의 정보를 참조</p>

<h1>기본 내장객체 - request</h1>
<p>JSP/Servlet에서 가장 많이 사용하는 객체로 클라이언트의 요청을 처리하는데 사용</p>

<p> getRemoteAddr : <%=request.getRemoteAddr() %></p>
<p> getMethod : <%=request.getMethod() %></p>
<p> getRequestURI : <%=request.getRequestURI() %></p>
<p> getContextPath : <%=request.getContextPath() %></p>
<p> getQueryString : <%=request.getQueryString() %></p>
<p> getHeader : <%=request.getHeader("User-Agent") %></p>

<hr />
<h1>HTML 폼 요소에 대한 요청 처리</h1>
<p>HTML 폼에 입력된 정보는 웹브라우저를 통해 서버로 매개변수 형태(이름=값)로 전송됨</p>
<p>매개변수로 전달된 정보를 서버에서 처리하려면 request 객체를 이용해서 매개변수를 읽어와야 함</p>
<p>getParameter(이름) : 요청 매개변수의 값을 읽어옴</p>
<p>getParameterValues(이름) : 요청 매개변수의 값을 배열로 읽어옴</p>
<p>getParameterNames(이름) : 요청 매개변수의 이름을 열거형으로 읽어옴</p>
<p>getParameterMap(이름) : 요청 매개변수의 이름/값을 맵으로 읽어옴</p>
<p>setCharacterEncoding(인코딩) : 한글처리를 위해서 요청 매개변수 값을 지정한 인코딩으로 설정</p>
<p>getParameterNames(), getParametgerMap()을 이용하면 반복적인 코드 작성없이 효율적으로 요청 매개변수를 처리할 수 있음(춫천!!)</p>

<form method="post">
	이름 : <input type="text" name="name" /><br />
	비밀번호 : <input type="password" name="pwd" /><br />
	<input type="checkbox" name="hobby" value="등산" />등산
	<input type="checkbox" name="hobby" value="독서" />독서
	<input type="checkbox" name="hobby" value="게임" />게임<br />
	<input type="submit" value="입력완료" />
</form>

<%
	request.setCharacterEncoding("UTF-8");
	String name = request.getParameter("name");
	String pwd = request.getParameter("pwd");
	String[] hobby = request.getParameterValues("hobby");

	out.print("이름 : " + name);
	out.print("<br />비번 : " + pwd);
	if (hobby!=null){
		for (int i=0; i<hobby.length; ++i){
			out.print("<br />취미 : " + hobby[i]);
		}
	}
%>

</body>
</html>